#include "stm32f10x.h"                  // Device header
#include "PWM.h"



void Motor_Init(void)
{
	/*开启时钟*/
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);		//开启GPIOA的时钟
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 |GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);						//将PA4和PA5引脚初始化为推挽输出	
	
	PWM_Init();													//初始化直流电机的底层PWM
}




void Speed_left1(uint16_t Compare)
{
	TIM_SetCompare3(TIM2,Compare);      //通道3  左1
}
void Speed_right2(uint8_t Dir,uint16_t Compare)   //  dir(0,1):0 反转  1 正转 
{
	if(Dir)    //1 正传
	{
	GPIO_ResetBits(GPIOA,GPIO_Pin_8);         //     保留初始化GPIO 用于调控电机正反转
	GPIO_SetBits(GPIOA,GPIO_Pin_9);
	TIM_SetCompare2(TIM2,Compare);      //通道2  右2
	}
	else     //  flase 反转
	{
	 GPIO_SetBits(GPIOA,GPIO_Pin_8);         //     保留初始化GPIO 用于调控电机正反转
	 GPIO_ResetBits(GPIOA,GPIO_Pin_9);
     TIM_SetCompare2(TIM2,Compare);
	}
}
void Speed_left2( uint8_t  Dir ,uint16_t Compare)
{
	if(Dir)        // 1 正转
	{
    GPIO_ResetBits(GPIOB,GPIO_Pin_8);
	GPIO_SetBits(GPIOB,GPIO_Pin_9);
	     
	TIM_SetCompare1(TIM2,Compare);      //通道1   左2
	}
	else      //  flase  反转
	{
	GPIO_SetBits(GPIOB,GPIO_Pin_8);
	GPIO_ResetBits(GPIOB,GPIO_Pin_9); 
	TIM_SetCompare1(TIM2,Compare);      //通道1   左2
	}
}

void Speed_right1(uint16_t Compare)
{
	TIM_SetCompare4(TIM2,Compare);      //通道4  右1
}



// 左右转向


//  左右小弯  大弯    中弯


//  直线前进

//  不用更加平滑过渡吗？   -平滑？？？  

// 
 void motor_ahead(uint16_t Speed)    //直线前进  Speed 设定速度
 {
	 Speed_left1(Speed);
	 Speed_left2(1,Speed);
	 Speed_right1(Speed);
	 Speed_right2(1,Speed);
 }
 
 void motor_stop()   //直接stop
 {
	 Speed_left1(0);
	 Speed_left2(1,0);
	 Speed_right1(0);
	 Speed_right2(1,0);
 }
 void motor_turnright(uint16_t Speed)  //
 {
	 Speed_left1 (Speed);
	 Speed_left2 (1,Speed);
	 Speed_right1(Speed-50);
	 Speed_right2(0,Speed-100);
 }
 
void motor_turnleft(uint16_t Speed)
{
	Speed_left1 (Speed);
	Speed_left2 (1,Speed);
	Speed_right1(Speed);
	Speed_right2 (1,Speed);
	
}


